import cv2
from cvzone.PoseModule import PoseDetector

# 调用摄像头（0表示默认摄像头）
cap = cv2.VideoCapture(0)
# 初始化姿态检测器
detector = PoseDetector()
# 存储姿态数据的列表
posList = []

while True:
    # 读取摄像头帧
    success, img = cap.read()
    if not success:
        break  # 如果读取失败则退出循环

    # 检测姿态并绘制骨架
    img = detector.findPose(img)  # 绘制骨架到图像上
    lmList, bboxInfo = detector.findPosition(img)

    # 如果检测到人体关键点，保存姿态数据
    if bboxInfo:
        lmString = ''
        for lm in lmList:
            # 存储格式：x坐标,图像高度-y坐标,z坐标（转换y坐标是为了统一坐标系）
            lmString += f'{lm[0]},{img.shape[0]-lm[1]},{lm[2]},'
        posList.append(lmString)

    # 显示图像
    cv2.imshow('Pose Detection', img)

    # 等待按键事件，按下ESC键(27)或点击窗口关闭按钮退出
    key = cv2.waitKey(1)
    if key == 27:
        break

# 当程序退出时保存姿态数据到txt文件
with open("CameraPoseData.txt", 'w') as f:
    f.writelines(["%s\n" % item for item in posList])

# 释放资源
cap.release()
cv2.destroyAllWindows()